package com.demo.Sort;

/**
 * 算法:快速排序
 */
public class QuickSort {
    public static void main(String[] args) {
        int[] a = {30, 51, 78, 41, 64, 11, 01};
        quickSort(a, 0, a.length - 1);
        for (int i : a) {
            System.out.print("  " + i);
        }
    }

    /**
     * @param a 需要排序的数组
     * @param l 开始的长度 0
     * @param b 数组的长度
     */
    private static void quickSort(int[] a, int l, int b) {
        if (l < b) {
            int i, j, x;
            i = l;  //开始的长度 0
            j = b;  //数组的长度
            x = a[i]; //30
            while (i < j) {  // 0 < 6
                while (i < j && a[j] > x) //0 <6 && 1 > 30
                    j--; //开始的长度 -1  从右向左找第一个小于x的数
                if (i < j)  //  0 < 5
                    a[i++] = a[j]; //a[0] = 1
                while (i < j && a[i] < x) // 1 < 6 && 51 < 30
                    i++; // 2 // 从左向右找第一个大于x的数
                if (i < j) // 1<6
                    a[j--] = a[i]; //a[5] = a[1]
            }
            a[i] = x;
            quickSort(a, l, i - 1);//递归 数组 0 2-1
            quickSort(a, i + 1, b);//递归  数组 2+1 6
        }
    }
}
